home *** CD-ROM | disk | FTP | other *** search
- .\" @(#)guide/admin/config 1.5 9/6/92 04:13:42
- .NH
- Setting up Run-time Configuration Files
- .PP
- The
- .B smail3.1
- binary is preloaded with a complete configuration and needs no
- run-time configuration files. This preloaded configuration file is
- tunable over a small range through the
- .I EDITME
- file, and should be sufficient for many sites. However, if this
- configuration is not sufficient for your site, or if you wish to
- define a router that uses
- .I method
- files, then you can write run-time configuration files to adapt smail
- to fit your needs.
- .NH 2
- Types of Run-time Configuration Files
- .PP
- There are five types of run-time configuration files:
- .RS
- .IP \(bu
- one or two
- .B config
- files, used to set values for a variety of smail variables,
- .IP \(bu
- a
- .B directors
- file, describing the rules for resolving local addresses,
- .IP \(bu
- a
- .B routers
- file, describing the rules for resolving remote addresses,
- .IP \(bu
- a
- .B transports
- file, describing the possible methods for performing delivery,
- .IP \(bu
- and zero or more
- .B method
- files, which match hosts to transports.
- .RE
- .LP
- The following sections give
- overviews of the formats of these files, with examples of their use.
- For a complete format description see the man page
- .I smail (5).
- .NH 3
- Config Files
- .PP
- Any machine may have a primary and a secondary
- .B config
- file which redefines the values for a number of smail variables.
- These files can be used to define names for the localhost, define
- where files reside, setup the values for site-definable message header
- fields and more. Values set in the primary config file override
- values predefined in the smail binary. Values set in the secondary
- config file override values defined in the smail binary or in the
- primary configuration file. Also, the name of the secondary config
- file can be redefined in the primary configuration file.
- .PP
- The capability for having two such files is useful in networked
- environments with distributed filesystems. For example, on the Sun
- network at Amdahl Corp., we define the name of the primary
- configuration file to be
- .I /usr/local/lib/smail/config
- which is found on our fileservers. This file is maintained by the
- group that maintains the mailers running on all of the Suns. The
- primary configuration file defines a secondary configuration file
- named
- .I /private/usr/lib/smail/config .
- If such a file exists on a given workstation, it can be used to
- redefine the mailer behavior on that workstation without requiring
- different binaries.
- .PP
- Because this second configuration file can redefine the paths to any
- other configuration file or directory, any aspect of the mailer
- behavior can be changed. Thus, a gateway machine can use the same
- primary config file, director file and transport file as the other
- suns while using its own private router file. In addition, a
- machine on which a new delivery agent is being tested can define
- a private config file that points to its own router and transport
- files.
- .PP
- The format for either config file consists of text records that set a
- variable equal to some value. To set a variable to a string or
- numeric value, use the form:
- .DS I
- \fIvariable\fP = \fIvalue\fP
- .DE
- For example, the file
- .DS I
- postmaster = tron@glotz.uucp
- domains = wall.com
- spool_mode = 0664
- .DE
- sets the default address for the postmaster to ``tron@glotz.uucp'',
- sets the run-time equivalent of the EDITME variable DOMAINS to
- ``wall.com'' and sets the permission mode for spool files to allow the
- file owner and group to write it.
- .PP
- Boolean attributes can be set using the notation:
- .DS I
- +\fIboolean-variable\fP
- .DE
- and can be reset using the notation:
- .DS I
- \-\fIboolean-variable\fP
- .DE
- The ``\-\fIvariable\fP'' notation can also be used to set a numeric
- variable to zero and to unset a value for a string variable. For
- example, the following config file disables the use of an external
- transport file and tells smail that configuration files are not
- optional:
- .DS I
- \-transport_file
- +require_configs
- .DE
- Comments using the shell `#' notation and blank lines are allowed in
- config files. In addition, records can be extended by including white
- space at the beginning of successive lines. For example, the
- following config file sets the
- .B Received:
- header field to use for messages to a multi-line value and sets the
- name of a user that has few access capabilities:
- .DS I
- .ta .5i 2.5i
- # Use a verbose format for the Received: header field
- received_field = "Received: by $primary_name
- with smail ($version_string)
- id <$message_id@$primary_name); $date"
- .sp \n(PDu
- nobody = unknown # unknown has few access capabilities
- .TA
- .DE
- .PP
- The complete list of variables that can be set in the config files is
- described in the man page
- .I smail (5).
- .NH 3
- Directors, routers and Transports Files
- .PP
- The
- .B directors ,
- .B routers
- and
- .B transports
- files all have the same format. These files describe entries in a
- table where each entry describes the attributes for one director,
- router or transport. The order of entries in the director and router
- files is import, in that directors and routers are called in the order
- stated in the table. The order of entries in the transport file is
- not important.
- .PP
- An entry in one of these files defines:
- .RS
- .IP \(bu
- a name by which that entry is
- known.
- .IP \(bu
- a driver which implements the function for that entry.
- .IP \(bu
- a set of
- .I generic
- attributes from a set that can be applied to any entry in the file.
- .IP \(bu
- a set of
- .I driver-specific
- attributes, from a set that can be applied only to entries that use
- the specified driver.
- .RE
- .PP
- As an example, the director file entry below specifies the attributes
- for a director that reads aliases from a file
- .I /private/usr/lib/aliases :
- .DS I
- .ta .5i
- # read aliases from a file private to one machine on the network
- private_aliases:
- driver=aliasfile, owner=owner\-$user ;
- file=/private/usr/lib/aliases
- .TA
- .DE
- This entry is named
- .I private_aliases ,
- and depends upon the low-level director driver routine named
- .I aliasfile .
- Errors found while processing addresses found by this director
- are sent to an address formed by prepending ``owner\-'' to
- the name of the alias, and these the aliases are stored in the file
- .I /private/usr/lib/aliases .
- The
- .I aliasfile
- director driver implements a general mechanism for looking up aliases
- stored in a database. By default, this database is simply a file
- containing ASCII records in no particular order. The file
- .I /private/usr/lib/aliases
- could contain:
- .DS I
- .ta .5i 3i
- # tron is the postmaster for this particular machine
- Postmaster: tron
- .sp \n(PDu
- # list the users that are likely to use futatsu frequently
- Futatsu-Users:
- tron, # Ronald S. Karr
- chongo, # Landon Curt Noll
- deleanu # Jay Deleanu
- .TA
- .DE
- Notice that, as with other configuration files, an alias can be
- extended across multiple lines by beginning successive lines with
- whitespace.
- .PP
- The separation between
- .I generic
- attributes and
- .I driver-specific
- attributes mirrors the internal design of
- .B smail3.1 .
- Above the driver level, there exist routines that implement aspects of
- drivers, routers and transports that do not depend upon the specific
- means for performing the operation. These higher-level functions can
- be manipulated through the
- .I generic
- attributes. On the other hand, the drivers that actually perform
- these operations accept a different set of attributes to control their
- behavior. In the case of a driver thats read or writes to a file, a
- .B file
- attribute usually exists. In the case of a driver that executes a
- program a
- .B cmd
- attribute usually exists to specify how that program is to be invoked.
- .PP
- The complete description of the director, router and transport files
- is contained in the
- .I smail (5)
- man page. Included in the man page is a description for all of the
- drivers that are included in the
- .B smail3.1
- source distribution. The following sections describe the preloaded
- configuration. To serve as examples, these sections include
- configuration files which are the equivalent of the preloaded
- configuration.
- .NH 2
- The Preloaded Configuration
- .PP
- In order to gain a better understanding of how configuration files can
- be used to change the behavior of smail, it is useful to know what
- smail will do if run-time configuration files were not used. This
- behavior is defined in the preloaded configuration which is in the
- source file
- .I src/default.c .
- .PP
- The preloaded configuration currently comes in two flavors: one flavor
- is for systems that have Berkeley-style networking with TCP/IP, the
- other flavor is for sites that do not have such networking. The
- difference between the two is that a networking configuration defines
- two extra routers to match network hosts by name or by internet
- address. Also, one extra transport is defined to deliver using SMTP
- over a TCP/IP connection to a network host.
- .NH 3
- The Preloaded Director Configuration
- .PP
- If a
- .I directors
- configuration file is not found at run-time, then the default
- pre-loaded configuration is used. The default director configuration
- supports the following directors:
- .iP "aliasinclude and forwardinclude"
- For local addresses of the form
- .B :include:filename
- these addresses will be expanded into a list of addresses contained in
- the given ASCII file. The files to which these addresses refer are
- called
- .I "mailing list"
- files. This form of local address can come from any alias file,
- forward file or mailing list file. Users cannot supply such addresses
- themselves.
- .iP "aliases"
- This director scans for entries in an alias database. The name of
- this database, and the method by which this file is searched can be
- changed in the
- .I EDITME
- file. As distributed, aliases are taken from the file
- .I /usr/lib/aliases ,
- which is an unsorted ASCII text file. This alias file is optional,
- and is ignored if it does not exist. Any errors found while resolving
- addresses produced by an alias are mailed to an address with the
- string ``owner\-'' prepended to the name of the alias, if such a local
- address is defined.
- .iP "dotforward"
- A user may have a file named
- .I .forward
- in his or her home directory. If such a file exists it will be
- scanned for addresses. Any mail to a user that has such a file will
- be redirected to the addresses contained within it. The file can
- contain addresses which specify files or shell commands as recipients.
- If the forward file is owned by root or by the user himself, then
- deliveries to any shell commands or files are performed under the
- user's user and group id. Any errors found while resolving this list
- of addresses are mailed to the Postmaster. In a forward file for the
- user
- .I root ,
- deliveries to shell command and file addresses are performed under an
- unprivileged user and group ID. The same is true in the case of
- forward files that were not owned by root or by the given user.
- Finally, shell command and file addresses are not allowed at all in
- forward files that are in remotely accessible directories.
- .iP "forwardto"
- The mailbox file for a user may contain a line of the form
- .DS I
- Forward to \fIaddress\fP, \fIaddress\fP ...
- .DE
- as an alternate method for a user to forward his mail. Only one line
- is read from this file so addresses cannot be placed across multiple
- lines. The comments that apply to a
- .I forward
- file also apply to this use of a mailbox file, except that it is
- assumed that a mailbox file is not in a remotely accessible directory.
- .iP user
- A user is matched by name, either in upper or lower case, with
- delivery to that user being performed using a transport by the name of
- ``local''.
- .uP real-user
- A user can also be matched by name if the username is prefixed by
- ``real\-''. Delivery is performed by a transport named ``local''.
- .iP lists
- Mailing list files can be created under a mailing list directory.
- This is a directory named
- .I lists
- under the directory containing smail utilities and configuration files
- (typically
- .I /usr/lib/smail ).
- A new mailing list can be creating by making a file in this directory
- which contains a list of addresses. The basename of this file
- determines the local address which will be expanded to this list of
- addresses. For example, a file named
- .I info-smail
- could be created with a list of recipient addresses for the
- ``info-smail'' mailing list. Errors in delivering to this list of
- addresses are mailed to a local address with the name ``owner\-''
- prepended to the basename of the file, if such an address is defined.
- .iP smart_user
- If a local address is not matched by any other means, mail to that
- address can be sent to another machine using the
- .B smartuser
- director. The address to which this mail is redirected can be defined
- in a
- .I config
- file by setting the variable
- .B smart_user .
- For example, the following config file line could be used to redirect
- mail to the host amdahl.uts.amdahl.com:
- .DS I
- smart_user = $user@amdahl.uts.amdahl.com
- .DE
- If this variable is not set, then the
- .B smart_user
- director is ignored.
- .PP
- The order of entries in the director file determines the order in
- which operations are attempted. If a director matches an address then
- no other directors are called attempted to expand or resolve that
- address. A director file which is equivalent to the preloaded
- configuration is:
- .DS I
- .ta .5i 3i
- # aliasinclude \- expand ":include:filename" addresses
- # produced by alias files
- aliasinclude:
- driver = aliasinclude, # use this special-case driver
- nobody; # associate nobody user with addresses
- # when mild permission violations
- # are encountered
- .sp \n(PDu
- copysecure, # get permissions from alias director
- copyowners # get owners from alias director
- .DE
- .DS I
- .ta .5i 3i
- # forwardinclude \- expand ":include:filename" addresses
- # produced by forward files
- forwardinclude:
- driver = forwardinclude, # use this special-case driver
- nobody;
- .sp \n(PDu
- copysecure, # get perms from forwarding director
- copyowners # get owners from forwarding director
- .DE
- .DS I
- .ta .5i 3i
- # aliases \- search for alias expansions stored in a database
- aliases:
- driver = aliasfile, # general-purpose aliasing director
- \-nobody, # all addresses are associated
- # with nobody by default, so setting
- # this is not useful.
- owner = owner\-$user; # problems go to an owner address
- .sp \n(PDu
- file = /usr/lib/aliases,
- modemask = 002,
- optional, # ignore if file does not exist
- proto = lsearch
- .DE
- .DS I
- .ta .5i 3i
- # dotforward \- expand .forward files in user home directories
- dotforward:
- driver = forwardfile, # general-purpose forwarding director
- owner = Postmaster, # problems go to the user's mailbox
- nobody,
- sender_okay; # sender never removed from expansion
- .sp \n(PDu
- file = ~/.forward, # .forward file in home directories
- checkowner, # the user can own this file
- owners = root, # or root can own the file
- modemask = 002, # it should not be globally writable
- caution = daemon:root, # don't run things as root or daemon
- # be extra careful of remotely accessible home directories
- unsecure = "~ftp:~uucp:~nuucp:/tmp:/usr/tmp"
- .DE
- .DS I
- .ta .5i 3i
- # forwardto \- expand a "Forward to " in user mailbox files
- #
- # This emulates the V6/V7/System-V forwarding mechanism which uses a
- # line of forward addresses stored at the beginning of user mailbox
- # files prefixed with the string "Forward to "
- forwardto:
- driver = forwardfile,
- owner = Postmaster, nobody, sender_okay;
- .sp \n(PDu
- file = /usr/mail/${lc:user}, # the mailbox file for System V
- forwardto, # enable "Forward to " function
- checkowner, # the user can own this file
- owners = root, # or root can own the file
- modemask = 0002, # under System V, group mail can write
- caution = daemon:root # don't run things as root or daemon
- .DE
- .DS I
- .ta .5i 3i
- # user \- match users on the local host with delivery to their mailboxes
- user: driver = user; # driver to match usernames
- .sp \n(PDu
- transport = local # local transport goes to mailboxes
- .DE
- .DS I
- .ta .5i 3i
- # real_user \- match usernames when prefixed with the string "real\-"
- #
- # This is useful for allowing an address which explicitly delivers to
- # a user's mailbox file. For example, errors in a .forward file
- # expansion can be delivered here, or forwarding loops between
- # multiple machines can be resolved by using a real-username address.
- real_user:
- driver = user;
- .sp \n(PDu
- transport = local,
- prefix = "real\-" # for example, match real-root
- .DE
- .DS I
- .ta .5i 3i
- # lists \- expand mailing lists stored in a list directory
- #
- # mailing lists can be created simply by creating a file in the
- # /usr/lib/smail/lists directory.
- lists: driver = forwardfile,
- caution, # flag all addresses with caution
- nobody, # and then associate the nobody user
- owner = owner\-$user; # system V sites may wish to use
- # o\-$user, as owner\-$user may be
- # too long for a 14-char filename.
- .sp \n(PDu
- # map the name of the mailing list to lower case
- file = lists/${lc:user}
- .DE
- .DS I
- .ta .5i 3i
- # smart_user \- a partially specified smartuser director
- #
- # If the config file attribute smart_user is defined as a string such
- # as "$user@domain-gateway" then users not matched otherwise will be
- # sent off to the host "domain-gateway".
- #
- # If the smart_user attribute is not defined, this director is ignored.
- smart_user:
- driver = smartuser; # special-case driver
- .sp \n(PDu
- # do not match addresses which cannot be made into valid
- # RFC822 local addresses without the use of double quotes.
- well_formed_only
- .TA
- .DE
- .NH 3
- The Preloaded Router Configuration
- .PP
- If a
- .I routers
- configuration file is not found at run-time, then the default
- pre-loaded configuration is used. The default router configuration
- supports the following routers:
- .iP inet_addrs
- This router will match hosts specified as internet addresses enclosed
- in square brackets. Delivery to such hosts is always performed using
- the
- .B smtp
- transport (described in a later section). Any hostname with square
- brackets that does not match the form of an internet address will be
- considered an error. An example of an internet address is
- .B [192.2.12.142] .
- This router is only available on machines that support BSD compatible
- networking facilities.
- .iP inet_hosts
- This will match internet hostnames that can be matched through the
- .I gethostbyname (3N)
- library routine. Often this library function will match any host in
- the file
- .I /etc/hosts .
- Deliveries to hosts matched with this router are always performed using
- the
- .B smtp
- transport (described in a later section). This router is only
- available on machines that support BSD compatible networking
- facilities.
- .iP paths
- A path database is used to match hosts for which routes are known.
- Normally, this path database is stored in the file
- .I /usr/lib/smail/paths .
- Often this database will be generated from map files distributed over
- the USENET newsgroup
- .B comp.mail.maps ,
- though path databases can also be created through other means. A
- paths database associates a path with specific hostname or domain. A
- path is defined as a set of hostnames separated by single exclamation
- points (`!'), with the last host being followed by the string `%s'.
- An example of a simple path database is a file containing:
- .DS I
- .ta \w'.curds.org'u+2n
- \&.curds.org curds-vax!%s
- \&.whey.edu foo!whey-3b20!%s
- bar foo!bar!%s
- foo foo!%s
- .DE
- Each path in this database specifies the sequence of hosts, from first
- to last, through which a mail message must pass to reach the host
- specified on the left-hand-side. For more information on path
- databases see
- .I pathalias (8)
- and
- .I mkpath (8).
- Depending upon the configuration specified in the
- .I EDITME
- configuration file, this path file may need to be sorted, or it may
- be stored in a database created with the
- .I dbm (3X)
- library routines (see
- .I mkdbm (8)
- for information on how to create these databases). Delivery to hosts
- matched with this router is performed using the
- .B uux
- transport, which is described in a later section.
- .iP uucp_neighbors
- The program
- .I /usr/bin/uuname
- is used to obtain a list of sites that the local host communicates
- with over UUCP (see
- .I uucp (1)).
- This router compares hostnames against this list and causes delivery
- to be performed using the
- .B uux
- transport whenever a match is found.
- .iP smart_host
- If a hostname is not matched by any other means, mail to that host can
- be sent to another machine using the
- .B smarthost
- router. The path through which this mail is redirected can be
- defined in a
- .I config
- file by setting the variable
- .B smart_path .
- For example, the following config file line could be used to redirect
- mail to the neighboring host
- .I amdahl :
- .DS I
- smart_path = amdahl
- .DE
- If this variable is not set, then the
- .B smart_user
- director is ignored. Delivery is performed using the transport named
- in the
- .I config
- file variable
- .B smart_transport .
- If this variable is not set then the
- .B uux
- transport is used.
- .PP
- The order of entries in the router file determines the order in which
- operations are attempted. If a router matches a hostname completely,
- then no other operations are attempted to resolve that host. If a
- router matches a host partially, as a domain in the right-hand side of
- the hostname, then subsequent routers may also find routes. The
- router which finds the best match, based on number of characters
- matched, wins. In the case of a tie, the router earliest in the
- router file wins. A router file which is equivalent to the preloaded
- configuration file is:
- .DS I
- .ta .5i 3i
- # inet_addrs and inet_hosts are only defined when BSD networking
- # exists
- .sp \n(PDu
- # inet_addrs \- match domain literals containing literal IP addresses
- #
- # For example, [128.103.1.1] will match harvard.harvard.edu on the
- # internet. The library routine gethostbyaddr(3N) will be called to
- # see if a reverse mapping to the canonical hostname is available.
- inet_addrs:
- driver = gethostbyaddr, # router to match IP domain literals
- transport = smtp; # deliver using SMTP over TCP/IP
- .sp \n(PDu
- fail_if_error, # fail malformed domain literal addrs
- check_for_local # see if this is really the local host
- .DE
- .DS I
- .ta .5i 3i
- # inet_hosts \- match hostnames with gethostbyname(3N)
- inet_hosts:
- driver = gethostbyname, # match hosts with the library function
- transport = smtp
- .DE
- .DS I
- .ta .5i 3i
- # paths \- route using a paths file, like that produced by the
- # pathalias program
- paths: driver = pathalias, # general-use paths router
- transport = uux; # for matches, deliver over UUCP
- .sp \n(PDu
- file = paths, # sorted file containing path info
- proto = bsearch, # use a binary search
- optional, # ignore if the file does not exist
- domain = uucp # strip ending ".uucp" before searching
- .DE
- .DS I
- .ta .5i 3i
- # uucp_neighbors \- match neighbors accessible over UUCP
- uucp_neighbors:
- driver = uuname, # use a program which returns neighbors
- transport = uux;
- .sp \n(PDu
- cmd = /usr/bin/uuname, # specifically, use the uuname program
- domain = uucp
- .DE
- .DS I
- .ta .5i 3i
- # smart_host \- a partially specified smarthost director
- #
- # If the config file attribute smart_path is defined as a path from
- # the local host to a remote host, then hostnames not matched
- # otherwise will be sent off to the stated remote host. The config
- # file attribute smart_transport can be used to specify a different
- # transport.
- #
- # If the smart_path attribute is not defined, this router is ignored.
- smart_host:
- driver = smarthost, # special-case driver
- transport = uux # by default deliver over UUCP
- .TA
- .DE
- .NH 3
- The Preloaded Transport Configuration
- .PP
- If a
- .I transports
- configuration file is not found at run-time, then the default
- pre-loaded configuration is used. The default transport configuration
- supports the following transports:
- .iP local
- Deliver to users on the local machine. Mailbox files for local users
- are generally found under the directory
- .I /usr/spool/mail
- or under
- .I /usr/mail ,
- and have the same name as the corresponding user.
- To support the generally available user interfaces, such as
- .I Mail (1)
- and
- .I mailx (1),
- certain transformations are performed on the message. Namely, a line
- containing the return address of the sender and a time stamp is
- prepended to the message, a blank line is appended at the end, and any
- line beginning with the word ``From'' will have the character `>'
- prepended to it. An example of one of the lines prepended to the
- message is:
- .DS I
- From amdahl!futatsu!tron Mon Apr 18 16:11:13 1988
- .DE
- In addition, a ``Return-Path:'' header field is
- inserted which duplicates the return address of the sender.
- .iP pipe
- Local addresses which begin with a vertical bar character (`|') are
- delivered using this transport (the transport name
- .B pipe
- is reserved for this purpose). The
- .B pipe
- transport executes a shell command by calling the program
- .I /bin/sh .
- The message is passed on the standard input to this command. The
- shell command is formed by removing the vertical bar character from
- the beginning of the address. The alias or forward address which
- produced the pipe command address is stored in the environment as
- "$ADDR".
- .iP file
- Local addresses which begin with a slash (`/') or a tilde character
- (`~') are delivered using this transport (the transport name
- .B file
- is reserved for this purpose). The
- .B file
- transport appends to a file identified by the local address string.
- If the local address string begins with a slash, then it identifies an
- absolute path. If the string begins with ``~\fIusername/\fP'', then
- this substring is replaced by the home directory of the given user.
- If the string begins simply with ``~/'', then this substring will be
- replaced with any home directory associated with the address; e.g.,
- a file address in a user's
- .I ~/.forward
- file will be associated with that user's home directory.
- .iP uux
- The
- .B uux
- transport is used as the normal form of delivery over UUCP. This
- transport will deliver up to five addresses at a time by calling the
- program
- .I uux (1)
- to deliver mail to the program
- .I rmail (1)
- on a remote system. The request is queued, and actual delivery is not
- attempted immediately. To force an immediate attempt to contact the
- remote site, use the
- .B demand
- transport.
- .iP demand
- The
- .B demand
- transport is used to deliver up to five addresses at a time by calling
- the program
- .I uux (1)
- to deliver to a remote
- .I rmail (1)
- program. In contrast to
- .B uux
- this transport forces an immediate attempt to contact the remote site.
- .iP uusmtp
- The
- .B uusmtp
- transport is used to deliver using Batched SMTP over UUCP. It will
- deliver to an unlimited number of addresses by calling the program
- .I uux (1)
- to deliver to a remote
- .I rsmtp (1)
- program. The request is queued, and actual delivery is not attempted
- immediately.
- .iP demand_uusmtp
- This transport is used to deliver to an unlimited number of addresses
- by calling the program
- .I uux (1)
- to deliver to a remote
- .I rsmtp (1)
- program. This transport forces an immediate attempt to contact the
- remote site.
- .iP smtp
- For sites that have BSD networking facilities, this transport is
- available, which performs delivery by opening a TCP/IP virtual circuit
- to a remote host and engaging in an interactive SMTP dialogue to perform
- delivery.
- .PP
- The order of entries in the transport file is not important, unless
- transport entries with duplicate names exist. In this case, the
- transport earlier in the transport file is always used. A transport
- file which is equivalent to the preloaded configuration file is:
- .DS I
- .ta .5i 3i
- # local \- deliver mail to local users
- #
- # By default, smail will append directly to user mailbox files.
- local: driver = appendfile, # append message to a file
- return_path, # include a Return-Path: field
- local, # use local forms for delivery
- from, # supply a From_ envelope line
- unix_from_hack; # insert > before From in body
- .sp \n(PDu
- file = /usr/mail/${lc:user},# use this location for System V
- group = mail, # group to own file for System V
- mode = 0660, # under System V, group mail can access
- suffix = "\n" # append an extra newline
- .DE
- .DS I
- .ta .5i 3i
- # pipe \- deliver mail to shell commands
- #
- # This is used implicitly when smail encounters addresses which begin with
- # a vertical bar character, such as "|/usr/lib/news/recnews talk.bizarre".
- # The vertical bar is removed from the address before being given to the
- # transport.
- pipe: driver = pipe, # pipe message to another program
- return_path, local, from, unix_from_hack;
- .sp \n(PDu
- cmd = "/bin/sh \-c $user",# send address to the Bourne Shell
- parent_env, # environment info from parent addr
- pipe_as_user, # use user-id associated with address
- umask = 0022, # umask for child process
- \-log_output # do not log stdout/stderr
- .DE
- .DS I
- .ta .5i 3i
- # file \- deliver mail to files
- #
- # This is used implicitly when smail encounters addresses which begin with
- # a slash or twiddle character, such as "/usr/info/list_messages" or
- # perhaps "~/Mail/inbox".
- file: driver = appendfile,
- return_path, local, from, unix_from_hack;
- .sp \n(PDu
- file = $user, # file is taken from address
- append_as_user, # use user-id associated with address
- expand_user, # expand ~ and $ within address
- suffix = "\n",
- mode = 0644
- .DE
- .DS I
- .ta .5i 3i
- # uux \- deliver to the rmail program on a remote UUCP site
- uux: driver = pipe,
- uucp, # use UUCP-style addressing forms
- from, # supply a From_ envelope line
- max_addrs = 5, # at most 5 addresses per invocation
- max_chars = 200; # at most 200 chars of addresses
- .sp \n(PDu
- # the \-r flag prevents immediate delivery, parentheses around the
- # $user variable prevent special interpretation by uux.
- cmd = "/usr/bin/uux \- \-r $host!rmail $(($user)$)",
- umask = 0022,
- pipe_as_sender
- .DE
- .DS I
- .ta .5i 3i
- # demand \- deliver to a remote rmail program, polling on demand
- demand: driver = pipe,
- uucp, from, max_addrs = 5, max_chars = 200;
- .sp \n(PDu
- # with no \-r flag, try to contact remote site immediately
- cmd = "/usr/bin/uux \- $host!rmail $(($user)$)",
- umask = 0022, pipe_as_sender
- .DE
- .DS I
- .ta .5i 3i
- # uusmtp \- deliver to the rsmtp program on a remote UUCP site
- #
- # The rsmtp program is assumed to to take batched SMTP requests.
- uusmtp: driver = pipe,
- bsmtp, # send batched SMTP commands
- inet, # use internet forms for addressing
- \-max_addrs, # there is no limit on the number or
- \-max_chars; # total size of recipient addresses.
- .sp \n(PDu
- # supply \-r to prevent immediate delivery, the recipient addresses
- # are stored in the data sent to the standard input of rsmtp.
- cmd = "/usr/bin/uux \- \-r $host!rsmtp",
- umask = 0022, pipe_as_sender
- .DE
- .DS I
- .ta .5i 3i
- # demand_uusmtp \- deliver to a remote rsmtp program, polling on demand
- demand_uusmtp:
- driver = pipe, inet,
- bsmtp, \-max_addrs, \-max_chars;
- .sp \n(PDu
- # with no \-r flag, try to contact remote site immediately
- cmd = "/usr/bin/uux \- $host!rsmtp",
- umask = 0022, pipe_as_sender
- .DE
- .DS I
- .ta .5i 3i
- # smtp \- deliver using SMTP over TCP/IP
- #
- # Connect to a remote host using TCP/IP and initiate an SMTP conversation
- # to deliver the message. The smtp transport is included only if BSD
- # networking exists.
- #
- # NOTE: This is hardly optimal, a backend should exist which can handle
- # multiple messages per connection.
- #
- # ALSO: It may be necessary to restrict max_addrs to 100, as this is the
- # lower limit SMTP requires an implementation to handle for one
- # message.
- smtp: driver = smtp,
- \-max_addrs,
- \-max_chars, inet
- .TA
- .DE
-